package com.itany.corejava.code07_面向对象;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月01日 16:21
 */
public class Test15_对象的初始化顺序 {
    public static void main(String[] args) {
        // System.out.println("------------执行静态代码块与静态属性------------");
        System.out.println(Product.price);//执行静态代码块与静态属性

        System.out.println("---------实例被创建---------");
        Product product=new Product();//实例被创建，静态代码块>代码块>构造方法


        // 总结:
        // 代码块与构造方法每次创建对象时都会执行, 但是静态代码块只会执行一次
        // 执行顺序:静态代码块>代码块>构造方法
        Product product2=new Product("alice");

        System.out.println("-------调用方法--------");
        product2.show();
        product2.showName();
    }


}

class Product{
    String name;
    static double price;
    public Product(){
        System.out.println("这是无参构造方法");
    }
    public Product(String name){
        this.name=name;
        System.out.println("这是有参构造方法");
    }
    //代码块
    {
        System.out.println("这是一个代码块");
        name="jack";//建议实例属性在代码块中初始化
        price=40;
    }

    static{
        System.out.println("这是一个静态代码块");
        // name="cici";//静态代码块不能初始化实例属性
        price=50.9;//建议静态属性在静态代码块中初始化
    }
    public void show(){
        System.out.println("这是show方法:"+name+",price"+price);
    }
    public void showName(){
        System.out.println("我的名字是:"+name);
    }
    public static void print(){
        System.out.println("这是静态方法"+price);
    }
}